---
title: StateNotifierProvider
---

import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
import CodeBlock from "@theme/CodeBlock";
import todos from "!!raw-loader!/docs/providers/state_notifier_provider/todos.dart";
import todosConsumer from "!!raw-loader!/docs/providers/state_notifier_provider/todos_consumer.dart";
import { trimSnippet } from "../../../../../src/components/CodeSnippet";

`StateNotifierProvider` 是一个用于监听和公开StateNotifier的provider(来自 [state_notifier] package，由Riverpod重新分发)。

它一般用于：

- 暴露一个 **不可变** 的状态，在对自定义事件做出反应后可以随时间改变。
- 修改某些状态的逻辑(又名“业务逻辑”)集中在一个地方，随着时间的推移也能提高可维护性。

:::info
首选 [NotifierProvider] 。  
:::

我们可以使用 `StateNotifierProvider` 来实现一个待办清单列表。
这样做将允许我们公开 `addTodo` 等方法，让UI在用户交互时修改todo列表，下面是示例：

<CodeBlock>{trimSnippet(todos)}</CodeBlock>

现在我们已经定义了 `StateNotifierProvider` ，我们可以使用它来与UI中的待办清单列表交互：

<CodeBlock>{trimSnippet(todosConsumer)}</CodeBlock>

[state_notifier]: https://pub.dev/packages/state_notifier
[statenotifier]: https://pub.dev/documentation/state_notifier/latest/state_notifier/StateNotifier-class.html
[provider]: ./provider
[futureprovider]: ./future_provider
[notifierprovider]: ./notifier_provider
